//package com.hoki.zj.hrm.service.impl;
//
//import com.baomidou.mybatisplus.service.impl.ServiceImpl;
//import com.hoki.zj.hrm.domain.CourseType;
//import com.hoki.zj.hrm.mapper.CourseTypeMapper;
//import com.hoki.zj.hrm.service.ICourseTypeService;
//import com.hoki.zj.hrm.vo.CourseTypeVO;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.data.redis.core.RedisTemplate;
//import org.springframework.stereotype.Service;
//
//import java.io.Serializable;
//import java.util.ArrayList;
//import java.util.List;
//import java.util.Map;
//import java.util.stream.Collectors;
//
///**
// * <p>
// * 课程目录 服务实现类
// * </p>
// *
// * @author shukei
// * @since 2021-09-14
// */
////@Service
//public class CourseTypeServiceManualCacheManageImpl /*extends ServiceImpl<CourseTypeMapper, CourseType> implements ICourseTypeService*/ {
//
//    /** 注入自定义的RedisTemplate<Object, Object> */
//    @Autowired
//    private RedisTemplate<Object, Object> redisTemplate;
//
//    private static final String allCourseTypesKey = "ALL_COURSE_TYPE";
//
//    /**
//     * 1.树状菜单（课程类型）查询
//     * @return 返回课程类型的集合
//     */
//    @Override
//    public List<CourseType> getTreeDataOfCourseType() {
//        // 1.从redis中获取数据
//        List<CourseType> allCourseTypesFromRedis = (List<CourseType>) redisTemplate.opsForValue().get(allCourseTypesKey);
//        // 2.有数据转换为树状后返回
////        System.out.println(allCourseTypesFromRedis);
//        if (allCourseTypesFromRedis != null) {
//            return courseTypeToTreeData(allCourseTypesFromRedis);
//        }
//        // 3.没有数据,查询数据库,存入redis中
////        List<CourseType> allCourseTypes = baseMapper.selectList(null);
//        redisTemplate.opsForValue().set(CourseTypeServiceManualCacheManageImpl.allCourseTypesKey, allCourseTypes);
//        // 4.转换为树状后返回
//        return courseTypeToTreeData(allCourseTypes);
//    }
//
//    /**
//     * 树状菜单（课程类型）转换
//     */
//    private List<CourseType> courseTypeToTreeData(List<CourseType> allCourseTypes) {
//        // 2.循环查询所有一级课程类型
//        List<CourseType> rootCourse = new ArrayList<>();
//
//        Map<Long, CourseType> collect = allCourseTypes.stream().
//                collect(Collectors.toMap(CourseType :: getId, allCourseType -> allCourseType));
//
//        allCourseTypes.forEach(courseType -> {
//            if (courseType.getPid() == null || courseType.getPid() == 0) {
//                // 如果没有pid,就加入到一级课程中
//                rootCourse.add(courseType);
//            } else {
//                // 如果有pid的则分别加入到pid对应的上级课程类型的children List集合中
//                /*for (CourseType parentCourseType : allCourseTypes) {
//                    if (courseType.getPid().equals(parentCourseType.getId())) {
//                        parentCourseType.getChildren().add(courseType);
//                        break; // 添加后结束当前循环
//                    }
//                }*/
//                collect.get(courseType.getPid()).getChildren().add(courseType);
//            }
//        });
//        // 所有一级课程类型,和其中的children都已经查询完毕,返回即可
//        return rootCourse;
//    }
//
//    /**
//     * 3.添加: 清除缓存 キャッシュクリア
//     */
//    @Override
//    public boolean insert(CourseType entity) {
//        boolean isSuccess = super.insert(entity);
//        // 添加成功,清除redis缓存
//        if (isSuccess) redisTemplate.delete(allCourseTypesKey);
//        return isSuccess;
//    }
//
//    /**
//     * 4.修改: 清除缓存 キャッシュクリア
//     */
//    @Override
//    public boolean updateById(CourseType entity) {
//        boolean isSuccess = super.updateById(entity);
//        if (isSuccess) redisTemplate.delete(allCourseTypesKey);
//        return isSuccess;
//    }
//
//    /**
//     * 5.删除: 清除缓存 キャッシュクリア
//     */
//    @Override
//    public boolean deleteById(Serializable id) {
//        boolean isSuccess = super.deleteById(id);
//        if (isSuccess) redisTemplate.delete(allCourseTypesKey);
//        return isSuccess;
//    }
//}
